1 /*
2 * CacheRegions.java
3 *
4 * $Id: CacheRegions.java,v 1.4 2003/07/02 12:00:51 baliuka Exp $
5 */
6
7 package net.sf.voruta;
8
9 import java.util.*;
10 import java.sql.*;
11
12 /***
13 *
14 * @author baliuka
15 */
16 final class CacheRegions {
17
18
19
20 Map regions = Collections.synchronizedMap( new HashMap() );
21 int isolation;
22 private static Object [] STRINGS = new String[]{};
23
24 /*** Creates a new instance of CacheRegions */
25 public CacheRegions(int isolation ) {
26 this.isolation = isolation;
27 }
28
29 private Cache newCache(){
30
31 switch(isolation){
32
33 case Connection.TRANSACTION_NONE:
34 case Connection.TRANSACTION_READ_UNCOMMITTED:
35 return new ReadUncommitedCache();
36
37 case Connection.TRANSACTION_READ_COMMITTED:
38 return new ReadCommitedCache();
39
40 case Connection.TRANSACTION_REPEATABLE_READ:
41 case Connection.TRANSACTION_SERIALIZABLE:
42 return new SnapshotCache();
43 default : throw new IllegalStateException("unknown isolation level " + isolation);
44
45 }
46 }
47
48 private Cache getRegion(String name){
49
50 synchronized(regions){
51
52 Cache cache = (Cache)regions.get(name);
53 if(cache == null){
54 cache = newCache();
55 regions.put(name,cache);
56 }
57 return cache;
58
59 }
60 }
61
62 private String[] getAll(){
63 return ((String[])regions.keySet().toArray( STRINGS ) );
64 }
65
66 void clearAll(){
67 clearRegions(getAll());
68 }
69
70 void afterCommit(){
71 String names[] = getAll();
72 for( int i = 0, len = names.length; i < len; i++ ){
73 Cache cache = (Cache)regions.get(names[i]);
74 cache.afterCommit();
75 }
76 }
77
78 void beforeBegin(){
79 String names[] = getAll();
80 for( int i = 0, len = names.length; i < len; i++ ){
81 Cache cache = (Cache)regions.get(names[i]);
82 cache.beforeBegin();
83 }
84 }
85
86
87 void afterRollback(){
88 String names[] = getAll();
89 for( int i = 0, len = names.length; i < len; i++ ){
90 Cache cache = (Cache)regions.get(names[i]);
91 cache.afterRollback();
92 }
93 }
94
95
96 public void clearRegions(String names[]){
97
98 for( int i = 0, len = names.length; i < len; i++ ){
99 Cache cache = (Cache)regions.get(names[i]);
100 if(cache != null){
101 cache.clear();
102 }
103 }
104
105 }
106
107 public void put(String name, Object key, Object value ){
108 getRegion(name).put( key, value );
109 }
110
111 public Object get(String name, Object key ){
112
113 Cache cache = (Cache)regions.get(name);
114 if(cache != null){
115 return cache.get(key);
116 }else{
117 return null;
118 }
119 }
120
121
122
123 }
This page was automatically generated by Maven